#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "patient.h"
/*--------------------------------------------------------------------------------------------*/
void saisir_patient(Patient *p,char fichier_patient[])
{
int ID;
char ma[10]="masculin";
char fe[10]="feminin";
do
{
printf("donner le nom\n");
scanf("%s",p->nom);
}
while((strlen(p->nom))<3);
do
{
printf("donner le prenom\n");
scanf("%s",p->prenom);
}
while((strlen(p->prenom))<3);
do
{
printf("donner le sexe\n");
scanf("%s",p->sexe);
}
while(((strcmp(ma,p->sexe))!=0)&&((strcmp(fe,p->sexe))!=0));
do
{
printf("donner la date d'entree\n");
scanf("%d%d%d",&(p->date_embauche.jour),&(p->date_embauche.mois),&(p->date_embauche.annee));
}
while(((p->date_embauche.jour)>31)||((p->date_embauche.jour)<1)||((p->date_embauche.mois)<1)||((p->date_embauche.mois)>12)||((p->date_embauche.annee)>2014||((p->date_embauche.annee)<2000)));
if((p->date_embauche.mois)==2)
{
do
{
printf("erreur de saisie du jour !!!\n");
printf("donner le jour d'entree correctte !!\n");
scanf("%d",&(p->date_embauche.jour));
}
while(((p->date_embauche.jour)>28)||((p->date_embauche.jour)<1));
}
do
{
printf("donner la date de naissance\n");
scanf("%d%d%d",&(p->date_naissance.jour),&(p->date_naissance.mois),&(p->date_naissance.annee));
}
while(((p->date_naissance.jour)>31)||((p->date_naissance.jour)<1)||((p->date_naissance.mois)<1)||((p->date_naissance.mois)>12)||((p->date_naissance.annee)>1989));
if((p->date_naissance.mois)==2)
{
do
{
printf("erreur de saisie du jour !!!\n");
printf("donner le jour de naissance correctte !!\n");
scanf("%d",&(p->date_naissance.jour));
}
while(((p->date_embauche.jour)>28)||((p->date_embauche.jour)<1));
}
printf("donner le role\n");
scanf("%s",p->role);
do
{
printf("donner la cin\n");
scanf("%ld",&(p->cin));
}
while(((p->cin)<1000000)||((p->cin)>99999999));
do
{
printf("donner l'age\n");
scanf("%d",&(p->age));
}
while(((p->age)<1)||((p->age)>120));
do
{
printf("donner le num d_identifiant\n");
scanf("%d",&ID);
}
while((ID<10000)||(ID>99999));

 
FILE *f ;
    f=fopen(fichier_patient,"rb") ;
if (f!= NULL)
     {
      while(fread(p,sizeof(Patient),1,f)!=0)
       {
          if( ID==p->ID)
            {
                do
                {
                 printf("donner un autre  num d_identifiant\n");
                 scanf("%d",&ID);
                }
                while(((ID)<1)||((ID)>10000)||(ID==p->ID));
            }
       }
p->ID=ID;
     }
else
{
printf("erreur lors de l'ouverture du fichier_patient\n");
}
fclose(f);
}
/*--------------------------------------------------------------------------------*/

void enregistrer_patient(char fichier_patient[],Patient *p,int *n)
{
FILE*f;
f=fopen(fichier_patient,"ab");
if(f!=NULL)
{
 if((*n)<MAX)
  {
 saisir_patient(p,"patient.txt");
 fwrite(p,sizeof(Patient),1,f);
 (*n)++;
  }
}
else
{
printf("erreur lors de l'ouverture du fichier_patient\n");
}
fclose(f);
}
/*--------------------------------------------------------------------------------------------*/
void supprimer_patient_ID( char fichier_patient[],int ID)
{
    char tmp_patient[]="tmp_patient.txt";
    char archive_patient[]="archive_patient.txt";
    FILE *f ;
    FILE *t ;
    FILE *y ;
    Patient p;
    f=fopen(fichier_patient,"rb") ;
    t=fopen(tmp_patient,"wb") ;
    y=fopen(archive_patient,"wb");
    if (f!= NULL && t!=NULL && y!=NULL)
     {
      while(fread(&p,sizeof(Patient),1,f)!=0)
       {
          if( ID!=p.ID)
            {
             fwrite(&p,sizeof(Patient),1,t) ;
            }
           if( ID==p.ID)
            {
             fwrite(&p,sizeof(Patient),1,y) ;
            }
       }
     }
   printf("-----------------------\n");
   printf("le patient ayant le numero ID  %d est retiré de la liste et est archiver\n",ID );
   printf("-----------------------\n");
     fclose(f) ;
     fclose(t) ;
     fclose(y) ;
     f=fopen(fichier_patient,"wb") ;
     t=fopen(tmp_patient,"rb") ;
     if(f!=NULL && t!=NULL)
{
     while(fread (&p,sizeof(Patient),1,t)!=0)
     {fwrite(&p,sizeof(Patient),1,f) ;}
}
     fclose(f) ;
     fclose(t) ;     
     t=fopen(tmp_patient,"wb+") ;
     if (t!=NULL)	
     {
      printf("le fichier tmp_patient est vider\n\n");
     }
}
/*-------------------------------------------------------------------------------------------------*/
void afficher_archive_patient(char archive_patient[],Patient p)
{
FILE *y;
y=fopen(archive_patient,"rb");
if(y!=NULL)
{
while(fread(&p,sizeof(Patient),1,y)!=0)
{
printf("nom:%s\tprenom:%s\tsexe:%s\trole:%s\tcin:%ld\tage:%d\tidentifiant:%d\tdate de naissance:%d/%d/%d\tdate d'embauche:%d/%d/%d\n\n\n",p.nom,p.prenom,p.sexe,p.role,p.cin,p.age,p.ID,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);
}
}
else
printf("l'archive est vide\n");
fclose(y);
}


/*------------------------------------------------------------*/
void afficher_patient_ID(char fichier_patient[],Patient p,int ID)
{
FILE*f;

f=fopen(fichier_patient,"rb");
if(f!=NULL)
{
	fread(&p,sizeof(Patient),1,f);
   do  
  {
        if(ID==p.ID)
        { 
         printf("nom:%s\tprenom:%s\tsexe:%s\trole:%s\tcin:%ld\tage:%d\tidentifiant:%d\tdate de naissance:%d/%d/%d\tdate d'embauche:%d/%d/%d\n\n\n",p.nom,p.prenom,p.sexe,p.role,p.cin,p.age,p.ID,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);
        }
  }
  while(((fread(&p,sizeof(Patient),1,f))!=0)&&(feof(f)!=0));
}
else
{
printf("erreur lors de l'ouverture du fichier_patient");
}
fclose(f);
}

/*-ok---------------------------------------------------------------------------------------*/
int existence_patient_ID(char fichier_patient[],Patient p,int ID)
{
FILE*f;
f=fopen(fichier_patient,"rb");
if(f!=NULL)
{
	fread(&p,sizeof(Patient),1,f);
   do  
  {
        if(ID==p.ID)
        {
        return 1;
        }
  }
  while(((fread(&p,sizeof(Patient),1,f))!=0)&&(feof(f)!=0));
}
else
{
printf("erreur lors de l'ouverture du fichier_patient");
}
fclose(f);
}
/*--ok-------------------------------------------------------------------------------------*/
void afficher_liste_patient(char fichier_patient[])
{
FILE*f;
Patient p;
f=fopen(fichier_patient,"rb");
if(f!=NULL)
{
strcpy (p.nom," " ) ;
strcpy(p.prenom," ");
p.age=0;
p.cin=0;
strcpy(p.role," ");
p.ID=0;
strcpy(p.sexe," ");
p.date_embauche.jour=0;
p.date_embauche.mois=0;
p.date_embauche.annee=0;
p.date_naissance.jour=0;
p.date_naissance.mois=0;
p.date_naissance.annee=0;


   fread(&p,sizeof(Patient),1,f);
   do
  {
   printf("nom:%s\tprenom:%s\tsexe:%s\trole:%s\tcin:%ld\tage:%d\tidentifiant:%d\tdate de naissance:%d/%d/%d\tdate d'embauche:%d/%d/%d\n\n\n\n\n",p.nom,p.prenom,p.sexe,p.role,p.cin,p.age,p.ID,p.date_naissance.jour,p.date_naissance.mois,p.date_naissance.annee,p.date_embauche.jour,p.date_embauche.mois,p.date_embauche.annee);

  }
   while(((fread(&p,sizeof(Patient),1,f))!=0)&&(feof(f)!=0));
}
else
{
printf("erreur lors de l'ouverture du fichier_patient");
}
fclose(f);
}
/*----------------------------------------------------------------------------------------------------------------------------------------------*/
void modifier_patient_ID( char fichier_patient[],Patient p,int ID)
{   
    int choix2;
    char ma[10]="masculin";
    char fe[10]="feminin";
    char tmp_patient[]="tmp_patient.txt";
    FILE *f ;
    FILE *t ;
    f=fopen(fichier_patient,"rb+") ;
    t=fopen(tmp_patient,"wb+") ;
    
    if (f!= NULL)
     {
      while(fread(&p,sizeof(Patient),1,f)!=0)
       {
            if(ID==p.ID)
             {
             afficher_patient_ID(fichier_patient,p,ID);
             printf("taper le numero du coordonners a modifier\n1:nom\t2:prenom\t3:sexe\t4:date d_ambauche\t5:date de naissance\t6:role\t7:cin\t8:age\t9:num d_identifiant\n");
             
/*ouvrir le fichier_patient en mode ecriture*/ 

 choix2=choix_num();
              switch(choix2)
             {
case 1:            do
                   {
                   printf("donner le nom\n");
                   scanf("%s",p.nom);
                   }
                   while((strlen(p.nom))<3);
break;
case 2:
                   do
                   {
                   printf("donner le prenom\n");
                   scanf("%s",p.prenom);
                   }
                   while((strlen(p.nom))<3);
break;
case 3:
                    do
                    {
                    printf("donner le sexe\n");
                    scanf("%s",p.sexe);
                    }
                    while(((strcmp(ma,p.sexe))!=0)&&((strcmp(fe,p.sexe))!=0));
break;
case 4:             do
                    {
                    printf("donner la date d'embauche\n");
                    scanf("%d%d%d",&(p.date_embauche.jour),&(p.date_embauche.mois),&(p.date_embauche.annee));
                    }
while(((p.date_embauche.jour)>31)||((p.date_embauche.jour)<1)||((p.date_embauche.mois)<1)||((p.date_embauche.mois)>12)||((p.date_embauche.annee)<2014));
                    if((p.date_embauche.mois)==2)
                    {
                    do
                    {
                    printf("erreur de saisie du jour !!!\n");
                    printf("donner le jour d'embauche correctte !!\n");
                    scanf("%d",&(p.date_embauche.jour));
                    }
                    while(((p.date_embauche.jour)>28)||((p.date_embauche.jour)<1));
                    }
break;
case 5:
                     do
                     {
                      printf("donner la date de naissance\n");
                      scanf("%d%d%d",&(p.date_naissance.jour),&(p.date_naissance.mois),&(p.date_naissance.annee));
                     }
while(((p.date_naissance.jour)>31)||((p.date_naissance.jour)<1)||((p.date_naissance.mois)<1)||((p.date_naissance.mois)>12)||((p.date_naissance.annee)>1989));
                    if((p.date_naissance.mois)==2)
                    {
                     do
                     {
                     printf("erreur de saisie du jour !!!\n");
                     printf("donner le jour de naissance correctte !!\n");
                     scanf("%d",&(p.date_naissance.jour));
                     }
                     while(((p.date_embauche.jour)>28)||((p.date_embauche.jour)<1));
                     }
break;
case 6:              printf("donner le role\n");
                     scanf("%s",p.role);
                     
break;
case 7:              do
                     {
                     printf("donner la cin\n");
                     scanf("%ld",&(p.cin));
                     }
                     while(((p.cin)<1000000)||((p.cin)>99999999));
break;
case 8:             do
                    {
                    printf("donner l'age\n");
                    scanf("%d",&(p.age));
                    }
                    while(((p.age)<26)||((p.age)>75));
break;
case 9:             do
                    {
                    printf("donner le num d_identifiant\n");
                    scanf("%d",&(p.ID));
                    }
                    while(((p.ID)<1)||((p.ID)>10000));
break;
default: printf("\nmauvais choix\n");

  }
              
             }
  	     fwrite(&p,sizeof(Patient),1,t) ;
             }
       } fclose(f) ;
         fclose(t) ;


       
       f=fopen(fichier_patient,"wb") ;
     t=fopen(tmp_patient,"rb") ;
     if(f!=NULL && t!=NULL)
{
     while(fread (&p,sizeof(Patient),1,t)!=0)
     {fwrite(&p,sizeof(Patient),1,f) ;}
}
     fclose(f) ;
     fclose(t) ;  
     t=fopen(tmp_patient,"wb") ;
     if (t!=NULL)
     {
      printf("le fichier tmp_patient est vider\n\n");
     }



   printf("-----------------------\n");
   printf("le patient ayant le numero d'identification  %d est modifier\n",ID );
   printf("-----------------------\n");

    
}
/*-----------------------------------------------------------------------------------------*/
void init_liste_patient(char fichier_patient[])
{
Patient p;
FILE *f;
f=fopen(fichier_patient,"wb");
if(f!=NULL)
{
 printf("le fichier patient est initialiser\n");
}           
else
{
printf("erreur lors de l'ouverture du fichier_patient\n");
}
fclose(f); 
}
/*------------------------------------------------------------------------------------------------------------------------*/
